﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.IO;


namespace WpfApplicationExperimental
{
    /// <summary>
    /// Interaction logic for AttachmentControl.xaml
    /// </summary>
    public partial class AttachmentControl : UserControl
    {
        public AttachmentControl()
        {
            InitializeComponent();
        }

        public DataAccesLayer.Attachment Attachment
        {
            get { return (DataAccesLayer.Attachment)GetValue(AttachmentProperty); }
            set { SetValue(AttachmentProperty, value); }
        }

        public static readonly DependencyProperty AttachmentProperty =
DependencyProperty.Register(
"Attachment",
typeof(DataAccesLayer.Attachment),
typeof(AttachmentControl),
new FrameworkPropertyMetadata(new DataAccesLayer.Attachment(), OnSelectedDateChanged));

        public event RoutedEventHandler OnAttachmentChanged ;
        public event RoutedEventHandler OnAttachmentSaved;
        public event RoutedEventHandler OnAttachmentInserted;



        /// <summary>
        /// SelectedDateProperty property changed handler.
        /// </summary>
        /// <param name="d">DatePicker that changed its SelectedDate.</param>
        /// <param name="e">DependencyPropertyChangedEventArgs.</param>
        private static void OnSelectedDateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
           
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
             System.Windows.Forms.OpenFileDialog dlg = new System.Windows.Forms.OpenFileDialog();
           // Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
            if (dlg.ShowDialog()== System.Windows.Forms.DialogResult .OK   )
            {
                string filepa = dlg.FileName;

                FileStream fs = new FileStream(filepa, FileMode.OpenOrCreate, FileAccess.Read);

                byte[] MyData = new byte[fs.Length];
                fs.Read(MyData, 0, System.Convert.ToInt32(fs.Length));

                fs.Close();

                char MyChar = '\\';
                string[] hg = filepa.Split(MyChar);
                string h = hg[hg.Length - 1];

                if (Attachment == null) Attachment = new DataAccesLayer.Attachment();

                Attachment.Name = h;
                Attachment.Data = new System.Data.Linq.Binary(MyData);


                //  System.Drawing.Icon icon  =  IconReader.GetFileIcon(filepa, IconReader.IconSize.Small, false);
                if (OnAttachmentChanged != null)
                    OnAttachmentChanged(Attachment, new RoutedEventArgs());

                new DataAccesLayer.EQualDataLayerFactory().UpdateDataBase();
            }

        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {
            SaveAttachment();
        }

        private void SaveAttachment()
        {
            System.Windows.Forms.SaveFileDialog dlg = new System.Windows.Forms.SaveFileDialog();
            dlg.FileName = Attachment.Name;

            if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {

                string filepa = dlg.FileName;

                FileStream fs = new FileStream(dlg.FileName, FileMode.Create, FileAccess.Write);

                byte[] MyData = Attachment.Data.ToArray();

                fs.Write(MyData, 0, System.Convert.ToInt32(MyData.Count()));

                fs.Close();

                OnAttachmentSaved(Attachment, new RoutedEventArgs());

            }
        }

        private bool FileCompare(string file1, string file2)
        {
            int file1byte;
            int file2byte;
            FileStream fs1;
            FileStream fs2;

            // Determine if the same file was referenced two times.
            if (file1 == file2)
            {
                // Return true to indicate that the files are the same.
                return true;
            }

            // Open the two files.
            fs1 = new FileStream(file1, FileMode.Open);
            fs2 = new FileStream(file2, FileMode.Open);

            // Check the file sizes. If they are not the same, the files 
            // are not the same.
            if (fs1.Length != fs2.Length)
            {
                // Close the file
                fs1.Close();
                fs2.Close();

                // Return false to indicate files are different
                return false;
            }

            // Read and compare a byte from each file until either a
            // non-matching set of bytes is found or until the end of
            // file1 is reached.
            do
            {
                // Read one byte from each file.
                file1byte = fs1.ReadByte();
                file2byte = fs2.ReadByte();
            }
            while ((file1byte == file2byte) && (file1byte != -1));

            // Close the files.
            fs1.Close();
            fs2.Close();

            // Return the success of the comparison. "file1byte" is 
            // equal to "file2byte" at this point only if the files are 
            // the same.
            return ((file1byte - file2byte) == 0);
        }

    }
}
